Programmable ICs include user configurable circuitry capable of implementing various digital logic operations. There are several types of programmable ICs, including Complex Programmable Logic Devices (CPLDs) and Field Programmable Gate Arrays (FPGAs). CPLDs include function blocks based on programmable logic array (PLA) architecture and programmable interconnect lines to route and transmit signals between the function blocks. FPGAs include configurable logic blocks (CLBs) arranged in rows and columns, input output blocks (IOBs), and programmable interconnect lines that route and transmit signals between the CLBs and IOBs. Each CLB includes look-up tables and other configurable circuitry that are programmable to implement logic functions. At startup, function blocks of CPLDs, CLBs of FPGAs, and interconnect lines are programmed according to configuration data (referred to as a configuration bitstream) that is loaded into a configuration memory of the programmable IC.
Circuit designs implemented in programmable ICs have become complex. Due to the time and investment required for design and debugging, it is desirable to protect the design from unauthorized copying. Recently, attempts have been made to reverse engineer configuration bitstreams to obtain logic of a circuit design for unauthorized use. For example, it is possible to retrieve configuration data from a configured programmable IC during startup or through analysis of the programmable IC during operation. The retrieved configuration data can be analyzed to determine the circuitry and logic associated with each bit of the configuration data. Recovery of circuit design logic allows an unauthorized party to incorporate the circuitry into other designs or implement copies of the circuit design on other programmable ICs.